import axios from 'axios'
// 目的：需要使用$message方法
import Vue from 'vue'
// 导入进度条插件
import NProgress from 'nprogress'
// 导入进度条样式
// import 'nprogress/nprogress.css'

// 创建axios对象
const request = axios.create({
  // 服务器的api地址
  // baseURL: 'http://localhost:8888/api/private/v1',
  // 线上服务器的域名
  baseURL: 'http://adminshopapi.lauxy.xyz/api/private/v1',
  // baseURL: 'http://43.142.67.192:8888/api/private/v1',
  // 超时时间
  timeout: 5000
})

// 定义请求拦截器
request.interceptors.request.use(config => {
  // 当进入request拦截器前，表示发送了请求，我们就开启进度条
  NProgress.start()
  // 预留着在请求头中添加token信息
  const token = sessionStorage.getItem('token')
  if (config.url !== '/login' && token) {
    config.headers.Authorization = token
  }
  return config
}, err => {
  return Promise.reject(err)
})

// 定义响应拦截器
request.interceptors.response.use(res => {
  // 当进入response拦截器，表示请求已经结束，我们就结束进度条
  NProgress.done()
  // return res.data;

  // 结果的处理
  const {
    meta,
    data
  } = res.data
  // 正常的结果返回
  if (meta.status === 200 || meta.status === 201 || meta.status === 202 || meta.status === 204) {
    return data
  } else {
    // 给用户提示
    Vue.prototype.$message.error(meta.msg)
    // 判断返回的信息
    // 返回信息让catch捕获，而不进入then的业务中
    return Promise.reject(new Error(meta.msg))
  }
}, err => {
  return Promise.reject(err)
})

export default request
